package co.edu.udea.iw.client;

import co.edu.udea.iw.client.server.ClienteService;
import co.edu.udea.iw.shared.ClienteListado;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Button;

public class Cliente extends Composite {
	
	ListaClientes lista;
	
	public Cliente() {
		
		VerticalPanel verticalPanel = new VerticalPanel();
		initWidget(verticalPanel);
		
		HorizontalPanel horizontalPanel = new HorizontalPanel();
		verticalPanel.add(horizontalPanel);
		
		Label lblCedula = new Label("Cedula*:");
		horizontalPanel.add(lblCedula);
		
		final TextBox txtCedula = new TextBox();
		txtCedula.setMaxLength(15);
		horizontalPanel.add(txtCedula);
		
		HorizontalPanel horizontalPanel_1 = new HorizontalPanel();
		verticalPanel.add(horizontalPanel_1);
		
		Label lblNombres = new Label("Nombres*:");
		horizontalPanel_1.add(lblNombres);
		
		final TextBox txtNombres = new TextBox();
		txtNombres.setMaxLength(30);
		horizontalPanel_1.add(txtNombres);
		
		HorizontalPanel horizontalPanel_2 = new HorizontalPanel();
		verticalPanel.add(horizontalPanel_2);
		
		Label lblApellidos = new Label("Apellidos*:");
		horizontalPanel_2.add(lblApellidos);
		
		final TextBox txtApellidos = new TextBox();
		txtApellidos.setMaxLength(30);
		horizontalPanel_2.add(txtApellidos);
		
		HorizontalPanel horizontalPanel_3 = new HorizontalPanel();
		verticalPanel.add(horizontalPanel_3);
		
		Label lblCorreo = new Label("Correo electr\u00F3nico*:");
		horizontalPanel_3.add(lblCorreo);
		
		final TextBox txtCorreo = new TextBox();
		txtCorreo.setMaxLength(120);
		horizontalPanel_3.add(txtCorreo);
		
		HorizontalPanel horizontalPanel_4 = new HorizontalPanel();
		verticalPanel.add(horizontalPanel_4);
		
		Button btnAceptar = new Button("Aceptar");
		horizontalPanel_4.add(btnAceptar);
		
		Button btnCancelar = new Button("Cancelar");
		horizontalPanel_4.add(btnCancelar);
		
		
		btnCancelar.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				txtCedula.setText("");
				txtNombres.setText("");
				txtApellidos.setText("");
				txtCorreo.setText("");
				
				mostrarListado();
			}
		});
		
		btnAceptar.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
				if("".equals(txtCedula.getText())){
					Window.alert("Debe digitar la cedula del cliente");
					return;
				}
				
				if("".equals(txtNombres.getText())){
					Window.alert("Debe digitar los nombres  del cliente");
					return;
				}
				
				if("".equals(txtApellidos.getText())){
					Window.alert("Debe digitar los apellidos del cliente");
					return;
				}
				
				if("".equals(txtCorreo.getText())){
					Window.alert("Debe digitar el correo del cliente");
					return;
				}
				
				
				ClienteService.Util.getInstance().guardarCliente(txtCedula.getText(), txtNombres.getText(), 
						txtApellidos.getText(), txtCorreo.getText(), new AsyncCallback<Void>() {
							
							@Override
							public void onSuccess(Void result) {
								Window.alert("Los datos del cliente se han guardado satisfactoriamente");
								
								ClienteListado cl = new ClienteListado();
								cl.setCedula(txtCedula.getText());
								cl.setNombreCompleto(txtNombres.getText() + " " + txtApellidos.getText());
								cl.setCorreo(txtCorreo.getText());
								
								txtCedula.setText("");
								txtNombres.setText(""); 
								txtApellidos.setText("");
								txtCorreo.setText("");
								
								
								lista.agregarCliente(cl);
								mostrarListado();
								
							}
							
							@Override
							public void onFailure(Throwable caught) {
								Window.alert(caught.getMessage());
							}
						});
			}
		});
		
		
	}
	
	
	public void setLista(ListaClientes lista){
		this.lista = lista;
	}
	private void mostrarListado(){
		
		lista.setVisible(true);
		this.setVisible(false);
	}
}
